//238
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
// void Ans(int*nums,int*answer,int len,int key)
// {
//     int sum=1;
//     for(int i=0;i<len;i++)
//     {
//         if(i==key)
//         continue;
//         sum*=nums[i];
//     }
//     answer[key]=sum;
// }

// int* productExceptSelf(int* nums, int numsSize, int* returnSize)
// {
//     *returnSize=numsSize;
//     int len=numsSize;
//     int *answer=(int*)malloc(sizeof(int)*numsSize);
//     for(int i=0;i<len;i++)
//     {
//         Ans(nums,answer,len,i);
//     }
//     return answer;

// }

int* productExceptSelf(int* nums, int numsSize, int* returnSize)
{
    int left=1;
    int right=1;
    *returnSize=numsSize;
    int *p=(int*)malloc(sizeof(int)*numsSize);
    for(int i=0;i<numsSize;i++)
    {
        p[i]=left;
        left*=nums[i];
    }
    for(int i=numsSize-1;i>=0;i--)
    {
        p[i]*=right;
        right*=nums[i];
    }
    return p;
}